//package com.ruizhong.centercontroll.util;
//
//import com.jogamp.opengl.*;
//import com.jogamp.opengl.awt.GLCanvas;
//import com.jogamp.opengl.util.FPSAnimator;
//import com.jogamp.opengl.util.texture.Texture;
//import com.jogamp.opengl.util.texture.awt.AWTTextureIO;
//import org.bytedeco.javacv.FFmpegFrameGrabber;
//import org.bytedeco.javacv.Frame;
//import org.bytedeco.javacv.Java2DFrameConverter;
//
//import javax.swing.*;
//import java.awt.*;
//import java.awt.event.WindowAdapter;
//import java.awt.event.WindowEvent;
//import java.awt.image.BufferedImage;
//import java.util.ArrayList;
//import java.util.List;
//
//public class OpenGlUtil implements GLEventListener {
//
//    private static JFrame frameContainer;
//
//    private static FPSAnimator animator;
//
//    public static void drawVideo(){
//        Dimension screenSize =
//                Toolkit.getDefaultToolkit().getScreenSize();
//        SwingUtilities.invokeLater(()->{
//
//            GLProfile glProfile = GLProfile.get(GLProfile.GL2);
//            GLCapabilities glCapabilities = new GLCapabilities(glProfile);
//            GLCanvas canvas = new GLCanvas(glCapabilities);
//
//            frameContainer = new JFrame();
//            frameContainer.getContentPane().add(canvas);
//            canvas.addGLEventListener(new OpenGlUtil());
//            canvas.setPreferredSize(new Dimension(screenSize.width, screenSize.height));
//            animator =new FPSAnimator(canvas,300,true);
//            frameContainer.addWindowListener(new WindowAdapter() {
//                @Override
//                public void windowClosing(WindowEvent e) {
//                    new Thread(()->{
//                        if (animator.isStarted()) animator.stop();
//                        System.exit(0);
//                    }).start();
//                }
//            });
//            frameContainer.setSize(screenSize.width,screenSize.height);
//            frameContainer.pack();
//            frameContainer.setVisible(true);
//            animator.start();
//        });
//    }
//
//    public static void closeWindow(){
//        animator.stop();
//
//    }
//
//    @Override
//    public void init(GLAutoDrawable glAutoDrawable) {
//        GL2 gl = glAutoDrawable.getGL().getGL2();
//        gl.glShadeModel(GL2.GL_SMOOTH);
//        gl.glClearColor(0f, 0f, 0f, 0f);
//        gl.glClearDepth(1.0f);
//        gl.glEnable(GL2.GL_DEPTH_TEST);
//        gl.glDepthFunc(GL2.GL_LEQUAL);
//        gl.glHint(GL2.GL_PERSPECTIVE_CORRECTION_HINT, GL2.GL_NICEST);
//        gl.glEnable(GL2.GL_TEXTURE_2D);
//        try {
//            openVideo("C:\\Users\\fengweijie\\Downloads\\dothack2.mpg");
//        } catch (FFmpegFrameGrabber.Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//
//    @Override
//    public void dispose(GLAutoDrawable glAutoDrawable) {
//
//    }
//
//    @Override
//    public void display(GLAutoDrawable glAutoDrawable) {
//        final GL2 gl = glAutoDrawable.getGL().getGL2();
//        BufferedImage bufferedImage;
//        synchronized (OpenGlUtil.class) {
//            bufferedImage = latestFrame;
//        }
//
//        if (bufferedImage == null) {
//            return;
//        }
//
//        GLProfile glProfile = gl.getGLProfile();
//        Texture t = AWTTextureIO.newTexture(glProfile, bufferedImage, true);
//        texture = t.getTextureObject(gl);
//
//        gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);
//        gl.glLoadIdentity();
//        gl.glBindTexture(GL2.GL_TEXTURE_2D, this.texture);
//        gl.glBegin(GL2.GL_QUADS);
//        gl.glVertex3f(-1.0f, 1f, 0);
//        gl.glTexCoord2f(0.0f, 0.0f);
//        gl.glVertex3f(1f, 1f, 0);
//        gl.glTexCoord2f(0.0f, 1.0f);
//        gl.glVertex3f(1f, -1f, 0);
//        gl.glTexCoord2f(1.0f, 1.0f);
//        gl.glVertex3f(-1f, -1f, 0);
//        gl.glTexCoord2f(1.0f, 0.0f);
//        gl.glEnd();
//        gl.glFlush();
//        gl.glBindTexture(GL.GL_TEXTURE_2D, 0);
//    }
//
//    @Override
//    public void reshape(GLAutoDrawable glAutoDrawable, int i, int i1, int i2, int i3) {
//
//    }
//
//    private int texture;
//
//    private FFmpegFrameGrabber grabber;
//
//    private Java2DFrameConverter converter;
//
//    private Frame frame;
//
//    private List<BufferedImage> bufferedImageList = new ArrayList<>();
//
//    private volatile BufferedImage latestFrame = null;
//    private void openVideo(String videoFilePath) throws FFmpegFrameGrabber.Exception {
//        grabber = new FFmpegFrameGrabber(videoFilePath);
//        grabber.start();
//        converter = new Java2DFrameConverter();
//        new Thread(() -> {
//            while (true) {
//                try {
//                    frame = grabber.grab();
//                } catch (FFmpegFrameGrabber.Exception e) {
//                    frame = null;
//                    e.printStackTrace();
//                }
//                if (frame == null) {
//                    break;
//                }
//                synchronized (OpenGlUtil.class) {
//                    latestFrame = converter.convert(frame);
//                }
//            }
//
//        }).start();
//    }
//}
